package offer

/*
时间复杂度：O(N)
空间复杂度：O(N)

hash+跳步

1.先通过hash存储所有的nums中的元素（可以达到去重的目的）
2.遍历hash，找到连续数字的最小的那个数curNum, 然后逐渐判断curNum+1是否存在，同时更新长度
*/

func longestConsecutive(nums []int) int {
	hash := make(map[int]bool)
	for _, v := range nums {
		hash[v] = true
	}

	ans := 0
	curNum := 0
	curLen := 0
	for k := range hash {
		if !hash[k-1] {
			curNum = k
			curLen = 1
			for hash[curNum+1] {
				curNum++
				curLen++
			}
			if ans < curLen {
				ans = curLen
			}
		}
	}
	return ans
}
